/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.losalpes.client;

import com.losalpes.persistence.IPersistenceServices;
import com.losalpes.persistence.entity.Cliente;
import com.losalpes.persistence.entity.CriterioBusqueda;
import com.losalpes.persistence.entity.Usuario;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author Luis Fernando Martinez Moreno
 */
@Stateless
@DeclareRoles({"admin", "cliente"})
public class ClientServices implements IClientService {

    @EJB
    private IPersistenceServices persistenceServices;

    /**
     * elimina un cliente
     * @param cliente cliente que va a ser eliminado
     * @return true si es exitoso, false en caso contrario
     */
    @RolesAllowed({"admin"})
    public void eliminarCliente(Cliente cliente) {
        persistenceServices.delete(cliente);
    }

    /**
     * Obtiene la lista de clientes buscados por un criterio
     * @param cliente cliente
     * @return lista de clientes que cumplen
     */
    public List<Cliente> findClientePorCriterio(CriterioBusqueda criterioBusqueda) {
        return persistenceServices.findClienteByCriterio(criterioBusqueda);
    }

    /**
     * obtiene la lista de clientes
     * @return lista total de clientes
     */
    public List findAll() {
        return persistenceServices.findAll(Cliente.class);
    }

    /**
     * Crea o actualiza un cliente
     * @param cliente cliente a actualizar
     */
    public void create(Cliente cliente) {
        persistenceServices.create(cliente);
    }

    /**
     * Hace la bùsqueda de un cliente por su id
     * @param idCliente id del cliente a buscar
     * @return cliente encontrado, null si no existe
     */
    public Cliente findClienteByIdentificacion(String numeroDocumento) {
        return (Cliente)persistenceServices.findById(Cliente.class, numeroDocumento);
    }

    /**
     * @see IClientService
     * @param cliente
     */
    public void update(Cliente cliente) {
        persistenceServices.update(cliente);
    }

    public Cliente findByUsuario(Usuario usuario){
        return persistenceServices.findClienteByUsuario(usuario);
    }

}
